﻿using System;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;

namespace CLM.Gestao.Custos.UI
{
    public partial class ImportarCustos : Form
    {
        #region Construtor

        public ImportarCustos(int pAno, int pMes)
        {
            try
            {
                InitializeComponent();
                var pos = this.PointToScreen(lblTitulo.Location);
                pos = picTitulo.PointToClient(pos);
                lblTitulo.Parent = picTitulo;
                lblTitulo.Location = pos;
                lblTitulo.BackColor = Color.Transparent;

                InicializaCombos(pAno, pMes);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        #endregion Construtor

        #region Eventos

        private void btnDestruicao_Click(object sender, EventArgs e)
        {
            txtDestruicao.Text = OpenFile();
        }

        private void btnReserva_Click(object sender, EventArgs e)
        {
            txtReserva.Text = OpenFile();
        }

        private void btnInvoices_Click(object sender, EventArgs e)
        {
            txtInvoices.Text = OpenFile();
        }

        private void btnCompras_Click(object sender, EventArgs e)
        {
            txtCompras.Text = OpenFile();
        }

        private void btnOrdemProducao_Click(object sender, EventArgs e)
        {
            txtOrdemProducao.Text = OpenFile();
        }

        private void btnImportar_Click(object sender, EventArgs e)
        {
            ValidarInterface();
            Importar();
        }

        void Custos_OnImportData(object sender, Importacao.ImportDataEventArgs e)
        {
            if (e.Tipo == Importacao.ImportDataEventArgs.type.Processo)
            {
                pgbProgresso.Maximum = e.Total;
                pgbProgresso.Value = e.Atual;

                lblMensagem.Text = String.Format("{0} - {1} de {2}", e.Mensagem, e.Atual, e.Total);
            }
            else
                lblMensagem.Text = String.Format("{0}", e.Mensagem);

            Application.DoEvents();
        }

        #endregion Eventos

        #region Métodos Privados

        private void InicializaCombos(int pAno, int pMes)
        {
            // Carrega o combo de Período
            Administrador.BLL.Periodo Periodo = new Administrador.BLL.Periodo();
            cboPeriodo.DataSource = Periodo.GetItens(new Administrador.BLL.Periodo.Lista() { AnoPeriodo = pAno });
            cboPeriodo.DisplayMember = "DescricaoPeriodo";
            cboPeriodo.ValueMember = "MesPeriodo";

            cboPeriodo.SelectedValue = pMes;
        }

        private void ValidarInterface()
        {
            if (string.IsNullOrWhiteSpace(cboPeriodo.Text)) throw new Exception("O período é obrigatório.");

            if (string.IsNullOrWhiteSpace(txtDestruicao.Text)
                && string.IsNullOrWhiteSpace(txtReserva.Text)
                && string.IsNullOrWhiteSpace(txtInvoices.Text)
                && string.IsNullOrWhiteSpace(txtCompras.Text)
                && string.IsNullOrWhiteSpace(txtOrdemProducao.Text))
                throw new Exception("Por favor, selecione ao menos um arquivo para efetuar a importação.");
        }

        private void Importar()
        {
            try
            {
                BLL.Custo Custo = new BLL.Custo();
                Custo.OnImportData += new Importacao.ImportDataEventHandler(Custos_OnImportData);

                // Recupera o período selecionado no combo
                Administrador.BLL.Periodo.Itens Periodo = new Administrador.BLL.Periodo.Itens();
                Periodo = (Administrador.BLL.Periodo.Itens)cboPeriodo.SelectedItem;

                if (!string.IsNullOrWhiteSpace(txtDestruicao.Text))
                {
                    Custo.ImportarBadGoodsExpenses(txtDestruicao.Text, (int)Periodo.MesPeriodo, (int)Periodo.AnoPeriodo);
                }

                if (!string.IsNullOrWhiteSpace(txtReserva.Text))
                {
                    Custo.ImportarBadGoodsAllowances(txtReserva.Text, (int)Periodo.MesPeriodo, (int)Periodo.AnoPeriodo);
                }

                if (!string.IsNullOrWhiteSpace(txtInvoices.Text))
                {
                    Custo.ImportarImportDuties(txtInvoices.Text, (int)Periodo.MesPeriodo, (int)Periodo.AnoPeriodo);
                    Custo.ImportarInboundFreightInsurance(txtInvoices.Text, (int)Periodo.MesPeriodo, (int)Periodo.AnoPeriodo);
                    Custo.CalcularAmostrasInvoices(txtInvoices.Text, (int)Periodo.MesPeriodo, (int)Periodo.AnoPeriodo);
                }

                if (!string.IsNullOrWhiteSpace(txtCompras.Text))
                {
                    Custo.ImportarTaxOverThirdParty(txtCompras.Text, (int)Periodo.MesPeriodo, (int)Periodo.AnoPeriodo);
                    Custo.ImportarNominalPPVCompras(txtCompras.Text, (int)Periodo.MesPeriodo, (int)Periodo.AnoPeriodo);
                    Custo.CalcularAmostrasCompras(txtCompras.Text, (int)Periodo.MesPeriodo, (int)Periodo.AnoPeriodo);
                }

                if (!string.IsNullOrWhiteSpace(txtOrdemProducao.Text))
                {
                    Custo.ImportarLocalQARework(txtOrdemProducao.Text, (int)Periodo.MesPeriodo, (int)Periodo.AnoPeriodo);
                    Custo.ImportarNominalPPVOrdemProducao(txtOrdemProducao.Text, (int)Periodo.MesPeriodo, (int)Periodo.AnoPeriodo);
                    Custo.CalcularAmostrasOrdemProducao(txtOrdemProducao.Text, (int)Periodo.MesPeriodo, (int)Periodo.AnoPeriodo);
                }

                txtDestruicao.Text = "";
                txtReserva.Text = "";
                txtInvoices.Text = "";
                txtCompras.Text = "";
                txtOrdemProducao.Text = "";

                Custo.OnImportData -= new Importacao.ImportDataEventHandler(Custos_OnImportData);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private string OpenFile()
        {
            string FileName = string.Empty;
            try
            {
                this.ofdImportar.Multiselect = false;
                this.ofdImportar.Title = "Selecionar Arquivo para Importação";
                this.ofdImportar.InitialDirectory = "C:\\";
                this.ofdImportar.FileName = "Selecione o arquivo...";
                this.ofdImportar.Filter = "Arquivos do Excel (*.xlsm;*.xlsx;*.xls)|*.xlsm;*.xlsx;*.xls";
                this.ofdImportar.CheckFileExists = true;
                this.ofdImportar.CheckPathExists = true;
                this.ofdImportar.FilterIndex = 2;
                this.ofdImportar.RestoreDirectory = true;
                this.ofdImportar.ReadOnlyChecked = true;
                this.ofdImportar.ShowReadOnly = true;

                DialogResult dr = this.ofdImportar.ShowDialog();
                if (dr == System.Windows.Forms.DialogResult.OK)
                    FileName = ofdImportar.FileNames.First();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

            return FileName;
        }

        #endregion Métodos Privados
    }
}